<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      function Parent() {
        this.colors = ['red', 'blue', 'green']
      }
      Parent.prototype.sayHi = function () {
        console.log('Hi')
      }
      function Child() {
        this.name = 'baiyujie'
        Parent.call(this)
        // call这个函数可以改变Parent内部的this指向，这里的第一个参数this指向 Child的实例对象
        // 所以这句话等同于  this.colors = ['red', 'blue', 'green']
        // 这样，通过调用 Parent 构造函数并传递 Child 的实例对象作为上下文，Child 对象的实例就会获得 Parent 构造函数中定义的属性和方法
      }

      var child1 = new Child()
      var child2 = new Child()

      child1.colors.push('yellow')

      console.log(child1.colors) // 输出：["red", "blue", "green", "yellow"]
      console.log(child2.colors) // 输出：["red", "blue", "green"]

      // child1.sayHi()       // ！！！缺点：拿不到被继承的构造函数上面的原型对象
      console.log(child1)
    </script>
  </body>
</html>
